/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox;

//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.ObjectInputStream;
//import java.io.ObjectOutputStream;
//import java.util.ArrayList;
//import java.util.PriorityQueue;
//import java.util.Queue;
//import java.util.logging.Level;
//import java.util.logging.Logger;
import java.awt.Color;
import java.util.List;
import util.Botao;
//import util.Recorde;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
import org.newdawn.slick.font.effects.Effect;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.FadeInTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;
import util.Recorde;

/**
 *
 * @author Lucas
 */
public class RecordesState extends BasicGameState {
    //Número do estado
    int stateID = 4;

    //Imagens
    Image background = null;
    Botao voltar = null;

    //Atributos para pegar a posição do mouse, botões do teclado etc
    Input input = null;
    int mouseX;
    int mouseY;

    //Variável para indicar se o mouse está sobre o botão de voltar
    boolean sobreVoltar = false;
    
    //Fonte para mostrar os resultados
    UnicodeFont fonte;
    int elem;
    
    //Array de recordes
    public static Recorde[] recordes = new Recorde[10];

    RecordesState( int stateID )
    {
       this.stateID = stateID;
    }

    @Override
    public int getID() {
        return stateID;
    }

    //Carregar as imagens, fonte e o array de recordes
    @Override
    public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {
        background = new Image("imagens/Espaço.jpg");
        voltar = new Botao(645, 547, "imagens/voltar.png");
        
        //Carregar a fonte
        fonte =  new UnicodeFont("STENCIL.TTF", 38, true, true);
        fonte.addAsciiGlyphs();
        fonte.getEffects().add(new ColorEffect(new Color(230, 4, 4)));
        fonte.loadGlyphs();
        
        //Iniciar o array com elementos "vazios"
        for(int i=0; i<10; i++){
            recordes[i] = new Recorde("", 0);
        }
    }

    //Renderizar as imagens
    @Override
    public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException {
        background.draw();
        voltar.draw();
        
        //Escrever os recordes na tela
        for(elem=0; elem<10; elem++)
            fonte.drawString(400-fonte.getWidth(recordes[elem].toString())/2, 40+elem*(fonte.getHeight(recordes[elem].toString())+20), recordes[elem].toString());
    }
    
    //Inserir um novo recorde no array de forma que este fique ordenado
    public static void adicionarRecorde(Recorde rec){
        int i;
        for(i=9; i>0 && rec.compareTo(recordes[i-1]) > 0; i--)
            recordes[i] = recordes[i-1];
        recordes[i] = rec;
    }

    //Atualizar o estado
    @Override
    public void update(GameContainer gc, StateBasedGame sb, int delta) throws SlickException {
        //Pegar posição do mouse
        input = gc.getInput();
        mouseX = input.getMouseX();
        mouseY = input.getMouseY();

        sobreVoltar = false;

        //Verificar se o mouse está sobre o botão de voltar
        if( ( mouseX >= voltar.getX() && mouseX <= voltar.getX() + voltar.getImageWidth()) &&
            ( mouseY >= voltar.getY() && mouseY <= voltar.getY() + voltar.getImageHeight()) )
        {
            sobreVoltar = true;
        }

        if(sobreVoltar)
        {
            //Aumentar o tamanho do botão
            if(voltar.getScale() < 1.05f)
                voltar.changeScale(Botao.scaleStep*delta);

            //Se o jogador clicou no botão, volta ao menu principal
            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                sb.enterState(StarFox.MAINMENUSTATE, new FadeOutTransition(), new FadeInTransition());
                voltar.setScale(1);
            }
        }else{
            //Se o mouse não está sobre o botão, diminuir até o tamanho normal
            if(voltar.getScale() > 1.0f)
                voltar.changeScale(-Botao.scaleStep*delta);
        }
    }
}